﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QLHXNK.BusinessLogic;
namespace QLHXNK
{
    public partial class FrmDanhMucChiPhi : Form
    {
        #region Properties
        int action = 0;//0:Thêm, 1: Xóa, 2: Sửa
        int id = -1;//ID của row
        #endregion

        #region Form functions
        public FrmDanhMucChiPhi()
        {
            InitializeComponent();
        }

        private void FrmDanhMucChiPhi_Load(object sender, EventArgs e)
        {
            getDataGridViewSource();
        }
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            prepareInsert();
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            Delete();
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            prepareUpdate();
        }

        private void dgvDanhMucChiPhi_SelectionChanged(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection rows = dgvDanhMucChiPhi.SelectedRows;
            if (rows.Count == 1)
            {
                DataGridViewRow row = rows[0];
                try
                {
                    id = int.Parse(row.Cells["row_id"].Value.ToString());
                }
                catch
                {
                    id = -1;
                }

                StateData(false, Color.LightGray);

                if ((id == -1 || id == 0) && dgvDanhMucChiPhi.SelectedRows[0].Index == 0)/////////////
                {
                    btnSua.Enabled = false;
                    btnXoa.Enabled = false;
                    FillData("", "", "");
                }
                else
                {
                    FillData(row.Cells["MaChiPhi"].Value.ToString(), row.Cells["TenChiPhi"].Value.ToString(),  row.Cells["GhiChu"].Value.ToString());
                    btnSua.Enabled = true;
                    btnXoa.Enabled = true;
                }
            }
            else
            {
                btnSua.Enabled = false;
                FillData("", "",  "");
            }
        }

        #endregion
        #region Hàm hỗ trợ
        private void getDataGridViewSource()
        {
            dgvDanhMucChiPhi.DataSource = Expenses.getExpensesList("");
            try
            {
                DataRow row = ((DataTable)dgvDanhMucChiPhi.DataSource).NewRow();

                ((DataTable)dgvDanhMucChiPhi.DataSource).Rows.InsertAt(row, 0);

            }
            catch
            {
            }

            if (Expenses.getExpensesList("").Rows.Count == 0)
            {
                ShowNote("Chưa có loại chi phí nào trong danh sách, Bạn nên cập nhật vào ", Color.Green);
                btnLuu.Enabled = true;
                btnXoa.Enabled = false;
                btnSua.Enabled = false;
                action = 0;//Thêm
            }
            else
            {
                lblNote.Visible = false;
                btnLuu.Enabled = false;
                action = -1;
            }
        }
        private void ProcessData()
        {
            //Xử lý khoảng trắng:
            txtMaChiPhi.Text = txtMaChiPhi.Text.Trim();
            txtTenChiPhi.Text = txtTenChiPhi.Text.Trim();
            txtGhiChu.Text = txtGhiChu.Text.Trim();
        }

        private bool ValidateData()
        {
            bool isValidate = true;

            //Mã hàng
            if (txtMaChiPhi.Text == "")
            {
                errorProvider1.SetError(txtMaChiPhi, "Bạn chưa nhập mã chi phí");
                isValidate = false;
            }

            //Tên hàng
            if (txtTenChiPhi.Text == "")
            {
                errorProvider1.SetError(txtTenChiPhi, "Bạn chưa nhập tên chi phí");
                isValidate = false;
            }

            return isValidate;
        }
        private void FillData(String maChiPhi, String tenChiPhi, String ghiChu)
        {
            txtMaChiPhi.Text = maChiPhi;
            txtTenChiPhi.Text = tenChiPhi;   
            txtGhiChu.Text = ghiChu;
        }

        private void StateData(bool state, Color color)
        {
            txtMaChiPhi.BackColor = color;
            txtTenChiPhi.BackColor = color;
            txtGhiChu.BackColor = color;

            txtMaChiPhi.Enabled = state;
            txtTenChiPhi.Enabled = state;
            txtGhiChu.Enabled = state;

        }


        private void ShowNote(string note, Color foreColor)
        {
            lblNote.Visible = true;
            lblNote.ForeColor = foreColor;
            lblNote.Text = note;
        }

         #endregion

        #region Lưu
        private void Save()
        {
            lblNote.Visible = false;
            ProcessData();                  //Tiền xữ lý dữ liệu nhập(xử lý khoản trắng...)

            if (ValidateData() == false)
            {
                ShowNote("Dữ liệu không hợp lệ. Hãy kiểm tra lại!", Color.Red);
                return;                     //nếu dữ liệu nhập không hợp lệ thì thoát và thông báo
            }

            if (action == -1)
            {
                ShowNote("Bạn hãy chọn chức năng: Thêm mới, Xoá, Sửa", Color.Green);
            }

            //Thêm:
            if (action == 0)
            {
                int result = Expenses.Insert(txtMaChiPhi.Text, txtTenChiPhi.Text, txtGhiChu.Text);
                if (result == 0 || result == -1)
                {
                    ShowNote("Chưa thể thêm mới. Xin thử lại!", Color.Red);
                    return;
                }

                if (result == 1)
                {
                    getDataGridViewSource();
                    ShowNote("Thêm thành công", Color.Blue);

                    btnSua.Enabled = true;
                    btnXoa.Enabled = true;
                }
            }

            //Sửa: action == 2
            if (action == 2 && id != -1)
            {
                int result = Expenses.Update(id, txtMaChiPhi.Text, txtTenChiPhi.Text, txtGhiChu.Text);

                if (result == 0 || result == -1)
                {
                    ShowNote("Chưa thể lưu. Xin thử lại!" + id.ToString(), Color.Red);
                    return;
                }

                if (result == 1)
                {
                    getDataGridViewSource();
                    ShowNote("Lưu thành công", Color.Blue);

                    btnThem.Enabled = true;
                    btnXoa.Enabled = true;
                }
            }
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            Save();
        }
        #endregion

        #region Thêm
        private void prepareInsert()
        {
            FillData("", "", "");
            StateData(true, Color.White);

            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;

            action = 0;

            ShowNote("Bạn hãy nhập thông tin cho hàng và click Lưu ", Color.Green);
        }
        #endregion

        #region Xóa
        private void Delete()
        {
            int result = 0;//số rows deleted
            DialogResult resultDlg = DialogResult.No;

            DataGridViewSelectedRowCollection rows = dgvDanhMucChiPhi.SelectedRows;

            if (rows.Count == 1)
            {
                if (dgvDanhMucChiPhi.SelectedRows[0].Index > 0)
                {
                    int ID = -1;

                    try
                    {
                        ID = int.Parse(rows[0].Cells["row_id"].Value.ToString());
                    }
                    catch
                    {
                        ID = -1;
                    }

                    if (ID != -1 && ID != 0)
                    {
                        resultDlg = MessageBox.Show("Bạn muốn xoá hàng bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                        if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                        {
                            result += Expenses.Delete(ID);
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    {
                        if (dgvDanhMucChiPhi.SelectedRows[0].Index > 0)
                            dgvDanhMucChiPhi.Rows.Remove(rows[0]);
                        return;
                    }
                }

            }
            else
            {
                resultDlg = MessageBox.Show("Bạn muốn xoá danh sách hàng bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                {
                    for (int i = 0; i < rows.Count; i++)
                    {
                        int ID = -1;

                        try
                        {
                            ID = int.Parse(rows[i].Cells["row_id"].Value.ToString());
                        }
                        catch
                        {
                            ID = -1;
                        }

                        if (ID != -1 || ID != 0)
                        {
                            result += Expenses.Delete(ID);
                        }
                    }
                }
                else
                {
                    return;
                }
            }


            //Thong báo kết quả:
            if (result > 0)
            {
                ShowNote("Xóa xong " + result.ToString() + " hàng", Color.Blue);
                getDataGridViewSource();
                action = -1;
                btnThem.Enabled = true;
                btnXoa.Enabled = true;
                btnSua.Enabled = true;
            }
            else
                ShowNote("Chưa xóa dc! Xin thử lại", Color.Red);
        }
        #endregion

        #region Sửa
        private void prepareUpdate()
        {
            StateData(true, Color.White);
            btnXoa.Enabled = false;
            btnThem.Enabled = false;
            btnLuu.Enabled = true;

            action = 2;

            ShowNote("Sửa thông tin cho hàng và click Lưu ", Color.Green);
        }

        #endregion

        private void dgvDanhMucChiPhi_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

       
       
      

        

       

       
    }
}